// 编写一个 Node.js 脚本，监控指定目录的文件变化（如新增文件、删除文件、修改文件）。当检测到变化时，打印出变化的文件名和变化类型。
// 提示：使用 fs.watch() 或 fs.watchFile()。

// 导入模块
const fs = await import("fs");

// 路径（目录）
const path = "./files";

// 监控指定文件变化（整个文件夹）
fs.watch(path, (eventType, filename) => {
  // 不同状态的提示
  switch (eventType) {
    case "change":
      console.log(`[修改了文件]: ${filename}`);
      break;
    case "rename":
      if (fs.existsSync(path + "/" + filename)) {
        console.log(`[新增了文件]: ${filename}`);
      } else {
        console.log(`[删除了文件]: ${filename}`);
      }
  }
});

// 导入模块
const Path = await import("path");

// 构建完整路径（单个文件）
const filePath = Path.join(path, "test.txt");

// 监控指定文件变化（单个文件）
fs.watchFile(filePath, { interval: 1000 }, (curr, prev) => {
  // 当前的文件状态与之前的文件属性进行比较，判断具体的状态
  // 判断文件是否存在
  if (!fs.existsSync(filePath)) {
    console.log(`[删除了文件]: ${Path.basename(filePath)}`);
    // 停止监视 删除的文件
    fs.unwatchFile(filePath);
  } else if (curr.mtime.getTime() !== prev.mtime.getTime()) {
    // 判断是否为新增文件
    if (!prev.size === 0 && curr.size > 0) {
      console.log(`[新增了文件]: ${Path.basename(filePath)}`);
    } else {
      console.log(`[修改了文件]: ${Path.basename(filePath)}`);
    }
  }
});
